/*
    *
    *  *  Copyright 2014 Orient Technologies LTD (info(at)orientechnologies.com)
    *  *
    *  *  Licensed under the Apache License, Version 2.0 (the "License");
    *  *  you may not use this file except in compliance with the License.
    *  *  You may obtain a copy of the License at
    *  *
    *  *       http://www.apache.org/licenses/LICENSE-2.0
    *  *
    *  *  Unless required by applicable law or agreed to in writing, software
    *  *  distributed under the License is distributed on an "AS IS" BASIS,
    *  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    *  *  See the License for the specific language governing permissions and
    *  *  limitations under the License.
    *  *
    *  * For more information: http://www.orientechnologies.com
    *
    */
package com.orientechnologies.orient.server.network.protocol.http;

import java.util.HashMap;
 import java.util.Map;

/**
  * Handles session information.
  *
  * @author Luca Garulli
  */
 public class OHttpSession {
   private final long          createdOn;
   private final String        databaseName;
   private final String        userName;
   private final String        userPassword;
   private String              id;
   private long                lastUpdatedOn;
   private Map<Object, Object> parameters;

   protected OHttpSession(final String iId, final String iDatabaseName, final String iUserName, String iUserPassword) {
     id = iId;
     createdOn = System.currentTimeMillis();
     lastUpdatedOn = createdOn;

     databaseName = iDatabaseName;
     userName = iUserName;
     userPassword = iUserPassword;
   }

   public long getCreatedOn() {
     return createdOn;
   }

   public long getUpdatedOn() {
     return lastUpdatedOn;
   }

   public OHttpSession updateLastUpdatedOn() {
     this.lastUpdatedOn = System.currentTimeMillis();
     return this;
   }

   public Object getParameters(final Object iKey) {
     if (this.parameters == null)
       return null;

     return parameters.entrySet();
   }

   public Object getParameter(final Object iKey) {
     if (this.parameters == null)
       return null;

     return parameters.get(iKey);
   }

   public OHttpSession setParameter(final Object iKey, final Object iValue) {
     if (this.parameters == null)
       this.parameters = new HashMap<Object, Object>();

     if (iValue == null)
       this.parameters.remove(iKey);
     else
       this.parameters.put(iKey, iValue);
     return this;
   }

   public String getDatabaseName() {
     return databaseName;
   }

   public String getUserName() {
     return userName;
   }

   public String getUserPassword() {
     return userPassword;
   }

   public String getId() {
     return id;
   }
 }
